package main

import (
	"encoding/json"
	"fmt"
)

// 结构体
// 如果要将结构体序列化为JSON，必须指定序列化后的JSON键名
type Person struct {
	Name       string `json:"name"`
	Age        int    `json:"age"`
	Is_married bool   `json:"is_married"`
}

func main() {
	// 创建一个结构体变量（初始值）
	p1 := Person{
		Name:       "小明",
		Age:        18,
		Is_married: false,
	}

	// fmt.Println(p1)
	// 序列化：将Go数据转为JSON
	jsonData, err := json.Marshal(p1)
	// 判断是否有错误
	// if err == nil {
	// 	// 成功后是一个字节切片，把它转为字符串
	// 	// fmt.Println("成功：", jsonData)
	// 	fmt.Println(string(jsonData)) // {"name":"小明","age":18,"is_married":false}

	// } else {
	// 	fmt.Println("错误：", err)
	// }

	// 反序列化，变回成结构体
	// 反序列化需要先准备一个空的结构体
	var p2 Person
	// 参数1：要反序列化的JSON，参数2：绑定的结构体变量
	err = json.Unmarshal(jsonData, &p2)
	if err == nil {
		fmt.Println(p2)
		fmt.Printf("值是:%v， 类型：%T", p2, p2)
	}
}
